package parser;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Iterator;
import java.util.Set;
import java.util.StringTokenizer;
import java.util.TreeSet;

public class Dicionario {

	private Set palavras = new TreeSet();

	public Dicionario (String nomeArq) {
				
		String linha;
		try {

			File arquivo = new File(nomeArq);
			FileReader reader = new FileReader(arquivo);
			BufferedReader in = new BufferedReader(reader);
			
			while(in.ready()) {
				linha = in.readLine();
				if (!(linha == null))
					palavras.add(linha);
			}
		}
		catch(FileNotFoundException fnfe) {
			System.out.println("Arquivo nao encontrado!");
			//System.exit(1);
		}
		catch(IOException ioe) {
			System.out.println("Problema na leitura dos dados!");
			//System.exit(1);
		}
	}
	
	
	
	// Remove do dicionario a string especificada	
	public void remove(String palavra) {
		palavras.remove(palavra);
	}
	
	// Verifica se a palavra est� contida no dicion�rio, retornando TRUE 
	// se estiver ou FALSE, caso contr�rio.
	public boolean contains(String palavra) {
		if (palavras.contains(palavra))
			return true;
		else
			return false;
	}	
	
	// Verifica se algumas das palavras que constituem a frase
	// est� contida no dicion�rio. Se nenhuma delas estiver, retorna TRUE,
	// indicando que a frase � v�lida. Caso contr�rio, retorna FALSE.
	public boolean validaFrase(String frase) {
		StringTokenizer st = new StringTokenizer(frase);
		
		while (st.hasMoreTokens())
			if (contains(st.nextToken()))
				return false;		
		return true;
	}
	
	// Lista todas as palavras do dicion�rio em ordem alfab�tica	
	public void print() {
		if (!palavras.isEmpty()) {
			//System.out.println("Palavras do dicion�rio:");
			Iterator ite = palavras.iterator();
			
			// Percorre o conjunto listando as palavras uma a uma
			while (ite.hasNext()) {
				System.out.println((String)ite.next());						
			}
		}
		else
			System.out.println("Dicionario vazio!");
	}
	
	public int size() {
		return palavras.size();
	}	
}
